import java.io.*;
/************************************************************************
 *
 * 			Biblio.java - Copyright Filipe Moreira 2007
 *
 *
 * 			Code licensed under GPL v2
 *
 *
 * 			%date% %time%
 * */



/**
 * Class Biblio
 */
public class CentroCultural {
	public static void main(String[] args){
		Menu menuMain;
		Menu menuClientes;
		Menu menuMateriales;
		Menu menuPrestamos;

		final int maxClientes=5;
		int numClientes=0;
		Cliente listaClientes[];
		Carnet listaCarnets[];

		listaClientes = new Cliente[maxClientes];
		listaCarnets = new Carnet[maxClientes];

		final int maxMateriales=8;
		int numMateriales=0;
		Material[] catalogoMateriales;
		catalogoMateriales = new Material[maxMateriales];


		boolean outMain = false;

		menuMain=new Menu(
			"MENÚ PRINCIPAL\n"+
			"Introduzca (1) para gestionar materiales\n"+
			"Introduzca (2) para gestionar clientes\n"+
			"Introduzca (3) para gestionar prestamos\n"+
			"Introduzca (0) para salir\n"+
			"Elija una opcion:",
			3);
		menuPrestamos=new Menu(
			"MENÚ DE PRÉSTAMOS\n"+
			"Introduzca (1) para prestar un material\n"+
			"Introduzca (2) para devolver un material\n"+
			"Introduzca (3) para mostrar los prestamos\n"+
			"Introduzca (0) para salir\n"+
			"Elija una opcion:",
			3);
		menuMateriales=new Menu(
			"MENÚ DE MATERIALES\n"+
			"Introduzca (1) para Añadir Materiales\n"+
			"Introduzca (2) para Mostrar Materiales\n"+
			"Introduzca (0) para Salir\n"+
			"Elija la opcion:",
			2);
		menuClientes=new Menu(
			"MENÚ DE CLIENTES\n"+
			"Introduzca (1) para Añadir Clientes\n"+
			"Introduzca (2) para Mostrar Clientes\n"+
			"Introduzca (0) para Salir\n"+
			"Elija la opcion:",
			2);

		while (!outMain){
			int optionMain;
			optionMain = menuMain.drawAndValidate();
			switch (optionMain){
				case 1:
					int optionMateriales=menuMateriales.drawAndValidate();
					switch (optionMateriales){
						case 1:
							if(numMateriales<maxMateriales){       
								System.out.println("El material es un: \n \t(d) Disco\n\t (l) Libro\n\n Introduzca una opcion: ");
								try{
									BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
									String discoOLibro=stdin.readLine();
									if(discoOLibro.charAt(0)=='d')
										catalogoMateriales[numMateriales]=new Disco(); 
									else
										catalogoMateriales[numMateriales]=new Libro();
									numMateriales++;
								}
								catch(IOException ex){}
							}
							else System.out.println("Maximo numero de materiales");
							break;
						case 2: 
							for(int i=0;i<numMateriales;i++){
								Class<? extends Material> m=catalogoMateriales[i].getClass();
								if(m.getName().equals("Disco"))
								       ((Disco)catalogoMateriales[i]).mostrar();
								else
								       ((Libro)catalogoMateriales[i]).mostrar();
							}
							break;
					}
					break;
				case 2:
					int optionClientes=menuClientes.drawAndValidate();
					switch (optionClientes){
						case 1: 
							if(numClientes<maxClientes){
								listaClientes[numClientes]=new Cliente();
								listaCarnets[numClientes]=new Carnet(listaClientes[numClientes]);
								numClientes++;
							}
							break;
						case 2: 
							for(int i=0;i<numClientes;i++)
								listaClientes[i].mostrarCliente();
							break;
					}
					break;
				case 3:
					boolean outPrestamos = false;
					while (!outPrestamos){
						int optionPrestamos;
						optionPrestamos = menuPrestamos.drawAndValidate();
						switch (optionPrestamos){
							case 1:
								try{
									BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
									System.out.println("Teclee el DNI del cliente: ");
									String codigoCliente=stdin.readLine();
									System.out.println("Teclee el código del material: ");
									String codigoMaterial=stdin.readLine();
									int j;
									for(j=0; j<numClientes; j++){
										if(listaClientes[j].igualCodigo(codigoCliente))
											break;
									}
									System.out.println("j vale"+j);
									listaCarnets[j].anotaPrestamo(codigoMaterial);

								}
								catch(IOException ex){}
								break;
							case 2:
								
								try{
									BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
									System.out.println("Teclee el DNI del cliente: ");
									String codigoCliente=stdin.readLine();
									System.out.println("Teclee el código del material: ");
									String codigoMaterial=stdin.readLine();
								
									int j;
									for(j=0; j<numClientes; j++){
										if(listaClientes[j].igualCodigo(codigoCliente))
											break;
									}
									System.out.println("j vale"+j);
									listaCarnets[j].borraPrestamo(codigoMaterial);
								}
								catch(IOException ex){}
								break;
							case 3:

								for(int i=0;i<numClientes;i++){
									listaCarnets[i].mostrarPrestamo();
								}	
							break;
								
							case 0:
								outPrestamos=true;
							
						}
					}
					break;
				case 0:
					outMain=true;
					break;
			}
		}

        }
}
